home *** CD-ROM | disk | FTP | other *** search
/ Ham Radio 2000 #1 / Ham Radio 2000.iso / ham2000 / packet / p_aa4re / bb212src / bbwinm2.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1992-02-16  |  3.7 KB  |  140 lines

  1. (*===========================================================================*)
  2. (* Find window top line.  This is the top line that is showing               *)
  3. (* Get new window line.  Returns buffer location                             *)
  4. (*                                                                           *)
  5. (*   Copyright 1988, 1989, 1991 by H. Roy Engehausen.  All rights reserved.  *)
  6. (*                                                                           *)
  7. (*===========================================================================*)
  8.  
  9. FUNCTION find_window_top_line : window_data_ptr;
  10.  
  11.   VAR
  12.     i : INTEGER;
  13.     w : window_data_ptr;
  14.     l : window_data_ptr;
  15.  
  16.   BEGIN;
  17.  
  18.     {$IFDEF DEPTH}
  19.       stack_depth;
  20.     {$ENDIF}
  21.  
  22.     WITH window_array[current_window] DO
  23.       BEGIN;
  24.         w := window_line;
  25.         i := window_location[window_loc].window_wl - 2;
  26.         l := w^.last_line;
  27.         WHILE (i > 0) AND (l <> NIL) DO
  28.           BEGIN;
  29.  
  30.             {$IFDEF POINT_CHK}
  31.               test_pointer(l);
  32.             {$ENDIF}
  33.  
  34.             {$IFDEF LOOP_POINT_CHK}
  35.               IF w = l THEN
  36.                 BEGIN;
  37.                   WRITELN('Window loop at find_top_line');
  38.                   dump_string('Wind loop at fine_top_line ' + p2x(w));
  39.                   dump_window(current_window);
  40.                   HALT;
  41.                 END;
  42.             {$ENDIF}
  43.  
  44.             w := l;
  45.             l := w^.last_line;
  46.             i := i - 1;
  47.  
  48.           END;
  49.       END;
  50.  
  51.       {$IFDEF LOOP_POINT_CHK}
  52.         IF w = l THEN
  53.           BEGIN;
  54.             WRITELN('Window loop at find_top_line');
  55.             dump_string('Wind loop at fine_top_line ' + p2x(w));
  56.             dump_window(current_window);
  57.             HALT;
  58.           END;
  59.       {$ENDIF}
  60.  
  61.      IF l <> NIL THEN
  62.        find_window_top_line := l
  63.      ELSE
  64.        find_window_top_line := w;
  65.  
  66.    END;
  67.  
  68. (*===========================================================================*)
  69. (* Get the next storage area for a window data line.  If possible,           *)
  70. (* reclaim it from the used area                                             *)
  71. (*===========================================================================*)
  72.  
  73. FUNCTION get_new_window_line : window_data_ptr;
  74.   VAR
  75.     l : window_data_ptr;
  76.     w : window_data_ptr;
  77.  
  78.   BEGIN;
  79.  
  80.     {$IFDEF DEPTH}
  81.     stack_depth;
  82.     {$ENDIF}
  83.  
  84.     WITH window_array[current_window] DO
  85.       BEGIN;
  86.  
  87.         IF (window_count < window_max_data) OR window_at_top THEN
  88.           BEGIN;
  89.             NEW(w);
  90.             window_count := window_count + 1;
  91.             get_new_window_line := w;
  92.             EXIT;
  93.           END;
  94.  
  95.         w := window_line;
  96.         l := window_line^.last_line;
  97.         WHILE l <> NIL DO
  98.           BEGIN;
  99.  
  100.             {$IFDEF POINT_CHK}
  101.               test_pointer(l);
  102.             {$ENDIF}
  103.  
  104.             {$IFDEF LOOP_POINT_CHK}
  105.               IF w = l THEN
  106.                 BEGIN;
  107.                   WRITELN('Window loop at get new');
  108.                   dump_string('Wind loop at get new' + p2x(w));
  109.                   dump_window(current_window);
  110.                   HALT;
  111.                 END;
  112.             {$ENDIF}
  113.  
  114.             w := l;
  115.             l := w^.last_line;
  116.  
  117.           END;
  118.  
  119.         {$IFDEF POINT_CHK}
  120.           test_pointer(w);
  121.         {$ENDIF}
  122.  
  123.         {$IFDEF LOOP_POINT_CHK}
  124.           IF w = l THEN
  125.             BEGIN;
  126.               WRITELN('Window loop at get new');
  127.               dump_string('Wind loop at get new' + p2x(w));
  128.               dump_window(current_window);
  129.               HALT;
  130.             END;
  131.         {$ENDIF}
  132.  
  133.         get_new_window_line := w;
  134.         w := w^.next_line;
  135.         w^.last_line := NIL;
  136.  
  137.       END;
  138.  
  139.   END;
  140.